-------------------------------------------------------------------------------
---! 内部方法
-------------------------------------------------------------------------------

---! 元表对象
local EQUIP_META = {}

function EQUIP_META:__index(key)
    local id = self.id
    if not id then
        return
    end

    local configs = IMPORT_D:query("equip")
    if not configs then
        return
    end

    local config = configs[id]
    if not config then
        return
    end

    local val = config[key]
    if not val then
        return
    end

    return val
end

-------------------------------------------------------------------------------
---! 对外接口
-------------------------------------------------------------------------------
EQUIP_D = {}

function EQUIP_D:init_equip_info(player)
    local configs = IMPORT_D:query("equip")
    if not configs then
        return
    end

    local equips = {}
    for pos = 1, 5 do repeat
        local config = configs[pos * 1000]
        if not config then
            break
        end

        equips[tostring(pos)] = setmetatable({ id = config.id, }, EQUIP_META)
    until true end
    player:set("equip", equips)
end

function EQUIP_D:level_up(equip)
    local configs = IMPORT_D:query("equip")
    if not configs then
        return
    end

    local new_id = equip.id + 1
    if not configs[new_id] then
        return
    end

    equip.id = new_id
end

function EQUIP_D:get_equip_by_pos(player, pos)
    return player:query("equip", pos)
end

function EQUIP_D:get_equip_total_level(player)
    local equips = player:query("equip")
    if not equips then
        return 0
    end

    local level = 0
    for _, equip in pairs(equips) do
        level = level + equip.level
    end
    return level
end

function EQUIP_D:build_equip_info(player)
    local equips = {}
    for pos = 1, 5 do
        local equip = player:query("equip", pos)
        if equip then
            table.insert(equips, { id = equip.id, level = equip.level, })
        end
    end
    return equips
end

function EQUIP_D:send_equip_info(userOb)
    local result = {}
    result.equip = EQUIP_D:build_equip_info(userOb)
    result.equiptype = userOb:get_equip_type()

    --!发送道具
    result.trump = userOb:query_trump()

    userOb:send_packet("MSGS2CEquipInfo", result)
end

function EQUIP_D:restore_equip_dbase(player)
    local equips = player:query("equip")
    if not equips then
        return
    end

    for _, equip in pairs(equips) do
        setmetatable(equip, EQUIP_META)
    end
end
